%%����AB������������Ƿ���ڲ���
%����A-PRE,A-POST,B-PRE,B-POST���鹲�ĸ�����

%A-PRE����
path1      = spm_select(1,'dir','please data1 dir');
%����spm_select����ѡȡ���������ļ���
file1         = dir([path1,filesep, '*.mat']);

for i=1:length(file1)
    load([path1,filesep,file1(i).name]);%�������
    Z(isnan(Z)) = 0;%��NaNɾ��
    Z(Z==Inf)    = 0;%��������ɾ��
    Z(Z==-Inf)   = 0;%�Ѹ�����ɾ��
    or_all_default_se1(:,:,i)=Z;%
    clear Z  %��Z���
end

%A-POST
path2     = spm_select(1,'dir','please data2 dir');
file2         = dir([path2,filesep, '*.mat']);
for i=1:length(file2)
    load([path2,filesep,file2(i).name]);%�������
    Z(isnan(Z)) = 0;%��NaNɾ��
    Z(Z==Inf)    = 0;%��������ɾ��
    Z(Z==-Inf)   = 0;%�Ѹ�����ɾ��
    or_all_default_se2(:,:,i)=Z;%
    clear Z  %��Z���
end

%B-PRE
path3     = spm_select(1,'dir','please data2 dir');
file3         = dir([path3,filesep, '*.mat']);
for i=1:length(file3)
    load([path3,filesep,file3(i).name]);%�������
    Z(isnan(Z)) = 0;%��NaNɾ��
    Z(Z==Inf)    = 0;%��������ɾ��
    Z(Z==-Inf)   = 0;%�Ѹ�����ɾ��
    or_all_default_se3(:,:,i)=Z;%
    clear Z  %��Z���
end

%B-post
path4     = spm_select(1,'dir','please data2 dir');
file4        = dir([path4,filesep, '*.mat']);
for i=1:length(file4)
    load([path4,filesep,file4(i).name]);%�������
    Z(isnan(Z)) = 0;%��NaNɾ��
    Z(Z==Inf)    = 0;%��������ɾ��
    Z(Z==-Inf)   = 0;%�Ѹ�����ɾ��
    or_all_default_se4(:,:,i)=Z;%
    clear Z  %��Z���
end
%%
%���ĸ������޸ĳɽ������õĸ�ʽ

[x1,y1,z1]=size(or_all_default_se1);%�õ�A�����ά��
[x2,y2,z2]=size(or_all_default_se3);%��Ҫ�õ���ά�ȳ���

matA_pre=reshape(or_all_default_se1,[x1*y1,z1]);%�������磬��FC��������һ����
matA_pre=matA_pre';%Ϊ���봫ͳ������ʽ�ӹ����Բ����˱���*������Ų���ʽ,����Ҫת��һ��

matA_post=reshape(or_all_default_se2,[x1*y1,z1]);
matA_post=matA_post';
all_matA=cat(1,matA_pre,matA_post);%���ȫ��������Ϊ��������Ҫ�õ�ȫ����

matB_pre=reshape(or_all_default_se3,[x2*y2,z2]);
matB_pre=matB_pre';

matB_post=reshape(or_all_default_se4,[x2*y2,z2]);
matB_post=matB_post';
all_matB=cat(1,matB_pre,matB_post);
%%
%�ֱ������ָ������������õ�ԭʼ�����
acc_A=zeros(2,10001);%������ȷ���õľ���
acc_B=zeros(2,10001);%������ȷ���õľ���

%����A����ָ�Ƽ���
[acc_A(1,1),p_Accuracy]=fingerprinting(matA_pre,matA_post,1,z1);
%����B����ָ�Ƽ���
[acc_B(1,1),p_Accuracy]=fingerprinting(matB_pre,matB_post,1,z2);
%����A�ķ���������
[acc_A(2,1),p_Accuracy]=shit2(all_matA,1,z1,z1);
%����B�ķ���������
[acc_B(2,1),p_Accuracy]=shit2(all_matB,1,z2,z2);
%%
%���ĸ���������һ����Ȼ�����·�����ĸ���
if z1==z2;
    t_pre=cat(2,matA_pre,matB_pre);%��ǰ����ϳ�һ��
    t_post=cat(2,matA_post,matB_post);%�������ϳ�һ��
    tt=cat(1,t_pre,t_post);%��ǰ�����ϳ�һ��
    
else
    t_pre=cat(1,matA_pre,matB_pre);%��ǰ����ϳ�һ��
    t_post=cat(1,matA_post,matB_post);%�������ϳ�һ��
    tt=cat(2,t_pre,t_post);
end

h=waitbar(0,'Game start')%�ٻ�������

for i=1:10000
    tt1=tt(:,randperm(x1*y1+x2*y2)); %�Ƚ����Ӵ���
    tt1=tt1(randperm(z1+z2),:);%�ٽ����Դ���
    %���û��õ������ӽ����з����µõ��ĸ�����
    matA_pre=tt1(1:z1,1:x1*y1);
    matB_post=tt1(z1+1:end,x1*y1+1:end);
    if z1==z2;
        matB_pre=tt1(1:z1,x1*y1+1:end);
        matA_post=tt1(z1+1:end,1:x1*y1);
    else
        matB_pre=tt1(z1+1:end,1:x1*y1);
        matA_post=tt1(1:z1,x1*y1+1:end);
      
    end
    [acc_A(1,i+1),p_Accuracy]=fingerprinting(matA_pre,matA_post,1,z1);
    %����B����ָ�Ƽ���
    [acc_B(1,i+1),p_Accuracy]=fingerprinting(matB_pre,matB_post,1,z2);
    %����A�ķ���������
    [acc_A(2,i+1),p_Accuracy]=shit2(all_matA,1,z1,z1);
    %����B�ķ���������
    [acc_B(2,i+1),p_Accuracy]=shit2(all_matB,1,z2,z2);
    %�ֱ�������·���һ�κ����ָ�ƺͷ������Ľ����һ���û�10000�Σ�
    waitbar(i/10000,h,[num2str(i),'/10000'])
    %����������
    clear t_pre1 matA_pre matB_pre
end
%%
%��Ϊ�������õ��İٷ��������Գ���100��ɷ���
acc_A(2,:)=acc_A(2,:)/100;
acc_B(2,:)=acc_B(2,:)/100;

%��Ϊ������ָ�ƿ��ܵ���0�����������ȷ��һ����Сֵ
a=acc_A==0;
acc_A(a)=0.001;

b=acc_B==0;
acc_B(b)=0.001;


%������ֵ
entropy_A=-(acc_A(1,:).*log2(acc_A(1,:))+(acc_A(2,:)).*log2(acc_A(2,:)));
entropy_B=-(acc_B(1,:).*log2(acc_B(1,:))+acc_B(2,:).*log2(acc_B(2,:)));

%����õ���
entropy=entropy_A-entropy_B;

%�����Pֵ
p_value=mean(entropy(1)<=entropy);

%�رս�����,����pֵ
close(h)
display (num2str(p_value))


